//
// Created by denglibin on 2021/4/7 0007.
//

#ifndef OPENGL_MINGW_CAMERA_H
#define OPENGL_MINGW_CAMERA_H
#include "glm.hpp"

class Camera {
public:
    glm::vec3 cameraPos; //摄像机位置
    glm::vec3 cameraFront;//摄像机方向
    glm::vec3 cameraUp;//摄像机上向量
    float cameraSpeed;//摄像机移动速度
    //摄像机的俯仰角和偏航角的改变会改变摄像机的方向
    float pitch; //摄像机俯仰角（上下）与xz平面的夹角
    float yaw; //摄像机偏航角（与z轴负方向夹角）
    //鼠标是否是第一次移到屏幕中，默认是
    int firstMouse;
    //记录鼠标上一次的位置
    float lastX;
    float lastY;
    float fovY;//视角
public:
    Camera();
    ~Camera();
    /**
     * 向前移动
     */
    void moveFront();
     /**
     * 向后移动
     */
    void moveBack();
     /**
     * 向左移动
     */
    void moveLeft();
     /**
     * 向右移动
     */
    void moveRight();

    /**
     * 向上移动
     */
    void moveUp();

    /**
     * 向下移动
     */
    void moveDown();

    /**
     * 根据鼠标位置改变 方向
     * @param x
     * @param y
     */
    void mouseDirection(double x, double y);
    /**
     * 鼠标滚轮滚动改变视角
     * @param x_offset
     * @param y_offset
     */
    void scrollFov( double x_offset, double y_offset);

};


#endif //OPENGL_MINGW_CAMERA_H
